\chapter{Набор таблиц в LaTeX}
При наборе таблиц в LaTeX, как нигде, нужна правильная организация кода. Откровенно говоря, таблицы - это то, что в ТеХе делать сложнее всего. И если вы свалите в кучу все управляющие метки ЛаТеХа, то проклянете потом всё на свете. Однако если делать всё грамотно и не лениться, то сделать таблицу в LaTeX не так трудно. 

Ещё раз подчеркну, что в деле набора таблиц в ЛаТеХе как нигде важно структурирование кода. Здесь каждый выбирает свой стиль по своему вкусу, однако надо постараться отличать управляющие символы от собственно текста таблицы. Например, символ \& можно помещать на новую строку.

Таблица в идеологическом смысле очень похожа на рисунок: есть окружение \begin{table}... \end{table}, которое собственно и содержит все ``опознавательные знаки'' вроде подписи и ссылки.

Есть одна вещь, которую почему-то не освещают в книжках, и совершенно напрасно. Дело в том, что есть для таблиц два окружения - \begin{table}... \end{table} и \begin{tabular}{|rlc|} ... \end{tabular}+. Так вот, окружение \textbf{table}, как ни странно, вам таблицу не создаст, и вы будете тщетно биться лбом о \textsc{Львовского}стену. Окружение \textbf{table} даёт вам возможность оформить заголовок таблицы с помощью \caption{} и поставить на таблицу ссылку с помощью привычного \label{}.

Кое-кто из комментаторов распалялся по поводу того, что, дескать, ``всё уже давно написано, читайте книжки''. Я ещё раз уточню свою позицию по этому поводу: \textit{время тыкания людей в пудовые талмуды и дурно написанные маны прошло. Документация, как и программы, должны быть повёрнуты к пользователю лицом, а не задницей. Специализированные методические пособия типа этого помогут людям начать разбираться с предметом, подталкивая к изучению книг и делая кривую обучения более пологой.}  Но это лирика и я не буду на ней задерживаться.

Сама таблица, то есть текст, набранный строго по столбцам и колонкам, делается с помощью окружения \textbf{tabular}. Важно помнить, что \textbf{tabular} есть просто текст-как-таблица и не содержит заголовка или ссылки. Сама по себе таблица находится в окружении \begin{tabular}{|rlc|} ... \end{tabular}+. Здесь вертикальная линия обозначает отделение линией столбцов, а R L и С выравнивание соответственно по правому / левому краю и по центру. Если столбец слишком широкий, можно задать его ширину с помощью выражения p{0.7\linewidth}, которое сделает столбец шириной в 70\% от ширины линии, например так: \begin{tabular}{|p{0.4\linewidth}p{0.4\linewidth}}+ сделает таблицу с двумя колонками по 40\% от ширины линии и отчеркнёт вертикальными линиями по бокам. Строки отделяются друг от друга при помощи команды \hline| а каждая строка таблицы завершается двойным слешем \\| или командой \linebreak|. В общем, это всё, что нужно для набора таблиц. Ну и немного удачи, конечно :-)

И немного вещей, которые помогут вам в дальнейшем. Набросайте на листке бумаги или графическом редакторе примерную схему таблицы - это всегда проще, а заодно есть возможность подумать о том, а нужна ли таблица вообще. Если решили, что она всё-таки  нужна, то это торжественное дело нужно скорее всего оформить по центру, для чего вам пригодится окружение \begin{center} \end{center}. Простановка ссылок осуществляется так же, как и всегда, то есть: поставить ссылку в LaTeX можно командой \label{tabl:Textssylki} а сослаться на неё командой \ref{tabl:Textssylki}. Не забываем ставить тильду между словом и ссылкой слово~\ref{tabl:Textssylki} чтобы ваша ссылка не уехала на другую строчку.

Напоминаю снова и снова о необходимости ставить понятные и информативные ссылки, чтобы вы сами смогли потом понять, где то место, куда вы ссылаетесь. Ставим длинные и подробные имена ссылок, чтобы потом не искать по Тайге ris21 или tabl43. Никаких оправданий таким именам ссылок нет, и дядя Кнут будет недоволен :-)

Итак, прочтите ещё разок этот текст сначала для лучшего запоминания и давайте разберём пару примерчиков. 



\section{Набор простой таблицы}
Например, нам не требуется ссылка на таблицу или подпись под ней - тогда достаточно только окружения \begin{tabular}... \end{tabular}. Ниже - пример кода простой таблицы в ЛаТеХе.

\begin{verbatim}
 \begin{center}
  \begin{tabular}{ccc}
  Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\
  Аподизация: & \textbf{0,25-0,30}& размер ФРТ \\
  Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\
  \end{tabular}
\end{center}
\end{verbatim}


\begin{center}
  \begin{tabular}{ccc}
  Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\
  Аподизация: & \textbf{0,25-0,30}& размер ФРТ \\
  Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\
  \end{tabular}
\end{center}

Здесь есть та самая партизанская засада, про которую я говорил выше: если вы внутрь окружения \textbf{tabular} поставите метку командой \label{} а потом сошлётесь на неё, то получите совсем не то, что ждёте. Ссылка в тексте укажет на \textit{номер раздела}, а вовсе не таблицы.

Вот тут-то мы и вспоминаем про то, что есть такое замечательное окружение как \textbf{table}. Давайте посмотрим, как наша таблица будет выглядеть с этим окружением:

\begin{verbatim}
\begin{table}[H]
\caption{Исправьте это на подпись к таблице}
\label{tabular:timesandtenses}
    \begin{center}
      \begin{tabular}{ccc}
      Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\
      Аподизация: & \textbf{0,25-0,30}& размер ФРТ \\
      Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\
      \end{tabular}
    \end{center}
 \end{table}
 \end{verbatim}

\begin{table}[H]
\caption{Исправьте это на подпись к таблице}
\label{tabular:timesandtenses}
    \begin{center}
      \begin{tabular}{ccc}
      Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\
      Аподизация: & \textbf{0,25-0,30}& размер ФРТ \\
      Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\
      \end{tabular}
    \end{center}
 \end{table}

Вроде как то же самое, только номер теперь стал 1.1. А кроме того, окружение \textbf{table} позволит вам указывать LaTeX, где вы хотите видеть таблицу:
\begin{enumerate}
\item оставить определение места таблицы в тексте на усмотрение ЛаТеХа - \begin{table}[h]| "хотелось бы таблицу здесь";
\item настойчиво просить разместить таблицу после текста \begin{table}[h!]| "очень хочу таблицу здесь", или
\item ударить кулаком по столу - таблицу тут \begin{table}[H]|  "ХОЧУ  таблицу здесь и баста", а с прибавлением буквы p мы заставляем поместить ЛаТеХ таблицу отдельно на страницу так: \begin{table}[pH]|.
\end{enumerate}

Вставка подписи к таблице \caption{Исправьте это на подпись к таблице}
и ссылки на таблицу \label{tabular:timesandtenses} делается так же, как и для рисунков.


\section{Объединение нескольких колонок в одну}
Часто нужно сделать в колонке пояснение, и убрать вертикальные линии для этого. В визуальных табличных редакторах типа OpenOffice.Calc это довольно просто. В ЛаТеХе это ничуть не сложнее, просто для этого нужно воспользоваться командой \multicolumn|.

Синтаксис у неё простой: \multicolumn{2}{|c|}{Результаты измерений}+ означает, что мы объединяем 2 строки в таблице, получившаяся ячейка будет центрирована и с вертикальными линиями, а в ней будет текст \textit{Результаты измерений}. Вот как это выглядит в реальной жизни:

\begin{verbatim}
\begin{table}[H]
\caption{\label{tab:canonsummary}Измерительные характеристики цифровой камеры Canon EOS 400D.}
\begin{center}
\begin{tabular}{|c|c|}
                \hline
Параметр & Значение \\
                \hline
Разрешение & $3888 \times 2592$ \\
Размер сенсора & $22.2 \times 14.8$ мм \\
АЦП & 12~bit\\
\hline
\multicolumn{2}{|c|}{Результаты измерений} \\
\hline
Темновое смещение (BLO) & 256 \\
Максимальный линейный сигнал & 3070~DN \\
Значение насыщения & 3470~DN \\
                \hline
\end{tabular}
\end{center}
\end{table}
\end{verbatim}


\begin{table}[H]
\caption{\label{tab:canonsummary}Измерительные характеристики цифровой камеры Canon EOS 400D.}
\begin{center}
\begin{tabular}{|c|c|}
                \hline
Параметр & Значение \\
                \hline
Разрешение & $3888 \times 2592$ \\
Размер сенсора & $22.2 \times 14.8$ мм \\
АЦП & 12~bit\\
\hline
\multicolumn{2}{|c|}{Результаты измерений} \\
\hline
Темновое смещение (BLO) & 256 \\
Максимальный линейный сигнал & 3070~DN \\
Значение насыщения & 3470~DN \\
                \hline
\end{tabular}
\end{center}
\end{table}

Это может пригодиться особенно в длинных таблицах, которые простираются на несколько страниц и которые нужно переносить со страницы на страницу. Сейчас мы ими и займёмся.




\section{Многостраничные таблицы}
Время от времени таблицы становятся длинными до неприличия и не влезают в одну страницу. Чтобы сделать многостраничную таблицу в ЛаТеХе, используем пакет расширений \usepackage{longtable}, который подключаем в преамбуле документа (там, где остальные команды типа \usepackage|). В остальном всё то же самое, как и раньше, только используем окружение longtable вместо table. Вот пример:

\begin{longtable}[h]{lp{0.7\linewidth}}
$A$ & area of the (geometrical) pixel [m\textsuperscript2] \\
$c$ & Speed of light $\approx 3 \cdot 10^8$ m/s \\
$DYN_{in}$ & Input dynamic range [1] \\
$DYN_{out}$ & Output dynamic range~[1] \\
$E$ & irradiance on the sensor surface~[W/m\textsuperscript2] \\
$F$ & Non-whiteness coefficient \\ 
$h$ & Planck's constant h $\approx6.63 \cdot 10^{-34} Js$ \\
$K$ & overall system gain~[DN/e-] \\
$k_d$ & Doubling temperature of the dark current~[$^\circ$C] \\
$N_d$ & dark current~[e-/s] \\
$N_{d30}$ &  dark current for a housing temperature of $30^\circ C$~[e-/s]\textsuperscript2 \\
$S_g^2$ & variance coefficient of the spatial gain noise~[\%] \\
\end{longtable}


И код:
\begin{verbatim}
\begin{longtable}[h]{lp{0.7\linewidth}}
$A$ & area of the (geometrical) pixel [m\textsuperscript2] \\
$c$ & Speed of light $\approx 3 \cdot 10^8$ m/s \\
$DYN_{in}$ & Input dynamic range [1] \\
$DYN_{out}$ & Output dynamic range~[1] \\
$E$ & irradiance on the sensor surface~[W/m\textsuperscript2] \\
$F$ & Non-whiteness coefficient \\ 
$h$ & Planck's constant h $\approx6.63 \cdot 10^{-34} Js$ \\
$K$ & overall system gain~[DN/e-] \\
$k_d$ & Doubling temperature of the dark current~[$^\circ$C] \\
$N_d$ & dark current~[e-/s] \\
$N_{d30}$ &  dark current for a housing temperature of $30^\circ C$~[e-/s]\textsuperscript2 \\
$S_g^2$ & variance coefficient of the spatial gain noise~[\%] \\
\end{longtable}
\end{verbatim}

Стоит упомянуть, что если столбец слишком широкий, можно задать его ширину вот так: \begin{longtable}[h]{lp{0.7\linewidth}} с помощью выражения p{0.7\linewidth}, которое сделает столбец шириной в 70\% от ширины линии.


\section{Таблицы с объединением столбцов}
Для того, чтобы несколько столбцов объединить в один (особенно в начале таблицы, для заголовков), применяется хитрый приём, сочетающий в себе несколько трюков. Я в начале не зря говорил, что таблицы в ЛаТеХе часто - занятие не для слабонервных :-) И тем не менее, выход есть всегда, вот например:

\begin{table}[H]
\caption{\label{tab:bolts} Нестандартные болты для левой резьбы.}
\begin{center}
    \begin{tabular}{|c|c|c|}
    \hline
    & \multicolumn{2}{c|}{Диаметр} \\
    \cline{2-3}
    \raisebox{1.5ex}[0cm][0cm]{Нестандартные болты}
    & Норма & Разброс \\
    \hline
    Размеры & 10 мм & 1 мм \\
    \hline
    \end{tabular}
\end{center}
\end{table}

Круто, да? Попробуйте такое в книжках разыскать, и я пожелаю вам удачи.

Разбор полётов: для этой таблицы использован трюк с \multicolumn| для объединения двух ячеек в одну, \cline{2-3} для прочерчивания горизонтальной линии в таблице от второй колонки до третьей, и \raisebox| для вставки надписи \textit{Нестандартные болты}. А вот и код:

\begin{verbatim}
\begin{table}[H]
\caption{\label{tab:bolts} Нестандартные болты для левой резьбы.}
\begin{center}
    \begin{tabular}{|c|c|c|}
    \hline
    & \multicolumn{2}{c|}{Диаметр} \\
    \cline{2-3}
    \raisebox{1.5ex}[0cm][0cm]{Нестандартные болты}
    & Норма & Разброс \\
    \hline
    Размеры & 10 мм & 1 мм \\
    \hline
    \end{tabular}
\end{center}
\end{table}
\end{verbatim}

Надеюсь, что с такими таблицами вы будете встречаться так же редко, как и с такими экзотическими болтами :-)


\section{Поворот таблицы в LaTeX}
Ну и под занавес приведу пример достаточно сложной таблицы, которая повёрнута на 90 градусов (таблица в ландшафтной ориентации в ЛаТеХе). Поворот сделан при помощи команды \rotatebox{90}{я - объект} что обеспечивает поворот любого объекта. Так как данные структурированы и код организован достаточно логично, редактировать таблицу относительно просто. Итак:


\begin{verbatim}
\rotatebox{90}{ %это обеспечивает поворот любого объекта
\begin{minipage}{1.5\linewidth}
\begin{table}[H]
\caption{Сравнение количественных данных по влиянию искажений на результат декодирования}
\begin{center}
        \begin{tabular}{|p{5cm}c|c|}
        \hline
\multicolumn{3}{|c|}{\textbf{Графические изображения}}\\
        \hline
\textbf{Характеристика} & \textbf{8-битные} & \textbf{16-битные}\\
        \hline
\multicolumn{3}{|c|}{Влияние шумов квантования}\\
        \hline
Шумы квантования
& $6.3 \div 22.6\%$
& $0.2 \div 0.5\%$ \\
        \hline
\multicolumn{3}{|c|}{Влияние шумов фотоприёмника}\\
        \hline
Шумы фотоприёмника
& $8.8 \div 87.5\%$
& $7.1 \div 87.6\%$ \\
        \hline
\multicolumn{3}{|c|}{Влияние особенностей ФРТ}\\
        \hline
декодирование ФРТ той же реализацией шума
& $6 \div 13\%$
& $0.5 \div 15\%$  \\
        \hline
декодирование ФРТ с другой реализацией шума
& $6 \div 14\%$
& $0.3 \div 12\%$ \\
        \hline
декодирование идеальным ФРТ
& $6 \div 6.5\%$
& $0.2 \div 6.4\%$ \\
        \hline
        \end{tabular}
\end{center}
\end{table}
\end{minipage}}
\end{verbatim}




\rotatebox{90}{ %это обеспечивает поворот любого объекта
\begin{minipage}{1.5\linewidth}
\begin{table}[H]
\caption{Сравнение количественных данных по влиянию искажений на результат декодирования}
\begin{center}
        \begin{tabular}{|p{5cm}c|c|}
        \hline
\multicolumn{3}{|c|}{\textbf{Графические изображения}}\\
        \hline
\textbf{Характеристика} & \textbf{8-битные} & \textbf{16-битные}\\
        \hline
\multicolumn{3}{|c|}{Влияние шумов квантования}\\
        \hline
Шумы квантования
& $6.3 \div 22.6\%$
& $0.2 \div 0.5\%$ \\
        \hline
\multicolumn{3}{|c|}{Влияние шумов фотоприёмника}\\
        \hline
Шумы фотоприёмника
& $8.8 \div 87.5\%$
& $7.1 \div 87.6\%$ \\
        \hline
\multicolumn{3}{|c|}{Влияние особенностей ФРТ}\\
        \hline
декодирование ФРТ той же реализацией шума
& $6 \div 13\%$
& $0.5 \div 15\%$  \\
        \hline
декодирование ФРТ с другой реализацией шума
& $6 \div 14\%$
& $0.3 \div 12\%$ \\
        \hline
декодирование идеальным ФРТ
& $6 \div 6.5\%$
& $0.2 \div 6.4\%$ \\
        \hline
        \end{tabular}
\end{center}
\end{table}
\end{minipage}}


\section{Заключение}
В этом разделе я собрал все примеры таблиц, которые использовал в реальных документах. Этого должно хватить для того, чтобы оформить практически любую таблицу, которую нужно вставить в ЛаТеХовский документ. Главное - структурирование кода таблицы и не лениться в этом деле, иначе таблицы в ЛаТеХе могут превратиться для вас в камеру пыток.
